From f812720fc624fb0ba88fb110ec28e306bff4b95b Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Sun, 4 Dec 2011 14:56:21 -0500 Subject: [PATCH] gnomeos: Make run script transparently update existing FS image This is noticeably faster. --- gnomeos/yocto/gnomeos-run.sh | 60 ++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/gnomeos/yocto/gnomeos-run.sh b/gnomeos/yocto/gnomeos-run.sh index 12f8e3a2..b4d34290 100755 --- a/gnomeos/yocto/gnomeos-run.sh +++ b/gnomeos/yocto/gnomeos-run.sh @@ -49,41 +49,49 @@ if (! test -f ${OBJ}); then rm -f ${OBJ}.tmp qemu-img create ${OBJ}.tmp 2G mkfs.ext3 -q -F ${OBJ}.tmp - mkdir -p fs - umount fs || true - mount -o loop ${OBJ}.tmp fs + mv ${OBJ}.tmp ${OBJ} +fi + +mkdir -p fs +umount fs || true +sleep 1 # Avoid Linux kernel bug, pretty sure it's the new RCU pathname lookup +mount -o loop gnomeos-fs.img fs + +cd fs - cd fs +TOPROOT_BIND_MOUNTS="home root tmp" - TOPROOT_BIND_MOUNTS="home root tmp" - - for d in $TOPROOT_BIND_MOUNTS; do +for d in $TOPROOT_BIND_MOUNTS; do + if ! test -d $d; then mkdir -m 0755 $d - done - chmod a=rwxt tmp + fi +done +chmod a=rwxt tmp +if ! test -d ostree; then mkdir ostree mkdir -p -m 0755 ./ostree/var/{log,run,tmp,spool} - cd ostree - mkdir repo - ostree --repo=repo init - ostree --repo=${OSTREE_REPO} local-clone repo - for branch in base dev; do - rev=$(ostree --repo=repo rev-parse ${BRANCH_PREFIX}${branch}); + mkdir ostree/repo + ostree --repo=ostree/repo init +fi +cd ostree +ostree --repo=${OSTREE_REPO} local-clone repo +for branch in base dev; do + rev=$(ostree --repo=repo rev-parse ${BRANCH_PREFIX}${branch}); + if ! test -d ${BRANCH_PREFIX}${branch}-${rev}; then ostree --repo=repo checkout ${rev} ${BRANCH_PREFIX}${branch}-${rev} - ln -s ${BRANCH_PREFIX}${branch}-${rev} ${BRANCH_PREFIX}${branch}-current - done - cd .. + fi + ln -sf ${BRANCH_PREFIX}${branch}-${rev} ${BRANCH_PREFIX}${branch}-current +done +cd .. - mkdir proc # needed for ostree-init - cp -a ./ostree/${BRANCH_PREFIX}base-current/usr/sbin/ostree-init . +test -d proc || mkdir proc # needed for ostree-init +cp -a ./ostree/${BRANCH_PREFIX}base-current/usr/sbin/ostree-init . - cd ${WORKDIR} - - umount fs - rmdir fs - mv ${OBJ}.tmp ${OBJ} -fi +cd ${WORKDIR} + +umount fs +rmdir fs ARGS="$@" if ! echo $ARGS | grep -q 'init='; then -- 2.30.2